function main(item) {
    // 频道ID映射表
    const n = {
        'CCTV1': '608807420',
        'CCTV2': '631780532', 
        'CCTV3': '624878271',
        'CCTV4': '631780421',
        'CCTV5': '641886683',
        'CCTV5p': '641886773',
        'CCTV6': '624878396',
        'CCTV7': '673168121',
        'CCTV8': '624878356',
        'CCTV9': '673168140',
        'CCTV10': '624878405',
        'CCTV11': '667987558',
        'CCTV12': '673168185',
        'CCTV13': '608807423',
        'CCTV14': '624878440',
        'CCTV15': '673168223',
        'CCTV17': '673168256',
        "东方卫视": '651632648',
        "内蒙古卫视": '738911430',
        "广东卫视": '608831231',
        "江苏卫视": '623899368',
        "江西卫视": '783847495',
        "河南卫视": '790187291',
        "浙江卫视": "783845111",
        "湖北卫视": '738906825',
        "陕西卫视": '738910838',
        "CHC影迷电影": '738921833',
        "CHC家庭影院": "783235131",
        "CHC动作电影": '732206245'
    };

    // 获取频道ID
    const url = item.url;
    const idParam = ku9.getQuery(url, "id");
    
    // 如果URL中没有id参数，尝试从频道名称匹配
    let channelId = idParam;
    if (!channelId) {
        // 从URL路径中提取频道名称
        const uri = ku9.Uri(url);
        const pathSegments = uri.Path.split('/');
        const lastSegment = pathSegments[pathSegments.length - 1];
        const channelName = lastSegment.split('.')[0];
        
        if (n[channelName]) {
            channelId = n[channelName];
        }
    }
    
    // 如果没有有效的频道ID，返回错误
    if (!channelId) {
        return JSON.stringify({ error: '无效的频道ID' });
    }

    // 缓存配置
    const CACHE_TIMEOUT = 10800000; // 3小时，单位毫秒
    const cacheKey = 'migu_' + ku9.md5(channelId);

    // 1. 尝试读取缓存
    const cacheDataStr = ku9.getCache(cacheKey);
    if (cacheDataStr) {
        try {
            const cacheData = JSON.parse(cacheDataStr);
            const now = Date.now();
            if (cacheData && (now - cacheData.created_at) < CACHE_TIMEOUT) {
                return JSON.stringify({ url: cacheData.real_url });
            }
        } catch (e) {
            // 缓存解析失败，继续获取新数据
        }
    }

    // 2. 获取最终播放地址
    const finalUrl = getFinalPlayUrl(channelId);

    // 3. 处理并缓存结果
    if (finalUrl) {
        // 缓存数据
        const cacheData = {
            real_url: finalUrl,
            created_at: Date.now()
        };
        ku9.setCache(cacheKey, JSON.stringify(cacheData), CACHE_TIMEOUT);
        
        return JSON.stringify({ url: finalUrl });
    } else {
        // 失败时尝试使用旧缓存（即使过期）
        if (cacheDataStr) {
            try {
                const cacheData = JSON.parse(cacheDataStr);
                return JSON.stringify({ url: cacheData.real_url, headers: { 'X-Cache-Status': 'expired' } });
            } catch (e) {
                // 旧缓存也无效
            }
        }
        return JSON.stringify({ error: '无法获取播放地址' });
    }
}

function getFinalPlayUrl(id) {
    const apiUrl = "http://api.miguhd.morefun.cn:3329/7d2A9g5C18h/?upstream=http://api2.miguhd.bazx.com.cn/live.php?id=" + encodeURIComponent(id);
    
    // 使用getHeaders获取重定向后的最终URL
    const headers = { 'User-Agent': 'MGPlayer/1.0' };
    const response = ku9.getHeaders(apiUrl, headers, true, "GET");
    
    if (response) {
        try {
            const headersObj = JSON.parse(response);
            const location = headersObj.Location || headersObj.location;
            
            if (location && location.includes('.m3u8')) {
                return location;
            }
            
            // 如果没有Location头，尝试从响应头中查找有效的m3u8 URL
            const effectiveUrl = headersObj['Effective-Url'] || apiUrl;
            if (effectiveUrl.includes('.m3u8')) {
                return effectiveUrl;
            }
        } catch (e) {
            // 解析失败，继续其他方式
        }
    }
    
    // 备用方案：直接尝试访问URL
    try {
        const directResponse = ku9.get(apiUrl, headers);
        if (directResponse && directResponse.includes('#EXTM3U')) {
            return apiUrl;
        }
    } catch (e) {
        // 直接访问也失败
    }
    
    return null;
}

// 辅助函数：清理过期的缓存（可选，可在其他时机调用）
function cleanExpiredCache() {
    // 这里可以定期清理过期的缓存项
    // 由于酷9的缓存机制会自动管理，这里主要做逻辑处理
}